package 中等.数学;

/**
 * 复数 可以用字符串表示，遵循 "实部+虚部i" 的形式，并满足下述条件：
 * <p>
 * 实部 是一个整数，取值范围是 [-100, 100]
 * 虚部 也是一个整数，取值范围是 [-100, 100]
 * i2 == -1
 * 给你两个字符串表示的复数 num1 和 num2 ，请你遵循复数表示形式，返回表示它们乘积的字符串。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/complex-number-multiplication
 */
public class 复数乘法_537 {

    public static void main(String[] args) {

        System.out.println(complexNumberMultiply("1+-1i", "1+-1i"));

    }

    /**
     * 乘法法则
     * 复数的乘法法则：把两个复数相乘，类似两个多项式相乘，结果中i2= -1，把实部与虚部分别合并。两个复数的积仍然是一个复数。
     * 即(a+bi)(c+di)=(ac-bd)+(bc+ad)i
     */
    public static String complexNumberMultiply(String num1, String num2) {
        StringBuilder builder = new StringBuilder();
        int num1Split = 0, num2Split = 0;
        for (int i = 0; i < num1.length(); i++) {
            if (num1.charAt(i) == '+') {
                num1Split = i;
                break;
            }
        }
        for (int i = 0; i < num2.length(); i++) {
            if (num2.charAt(i) == '+') {
                num2Split = i;
                break;
            }
        }
        int a, b, c, d;
        a = Integer.valueOf(num1.substring(0, num1Split));
        b = Integer.valueOf(num1.substring(num1Split + 1, num1.length() - 1));
        c = Integer.valueOf(num2.substring(0, num2Split));
        d = Integer.valueOf(num2.substring(num2Split + 1, num2.length() - 1));
        builder.append(a * c - b * d).append("+")
                .append(b * c + a * d).append("i");
        return builder.toString();
    }

}
